home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / bipl.zip / PROCS.ZIP / TEMPNAME.ICN < prev    next >
Text File  |  1992-09-28  |  2KB  |  58 lines

  1. ############################################################################
  2. #
  3. #    File:     tempname.icn
  4. #
  5. #    Subject:  Procedure to get temporary file name
  6. #
  7. #    Author:   Richard L. Goerwitz
  8. #
  9. #    Date:     June 1, 1991
  10. #
  11. ###########################################################################
  12. #
  13. #    Version:  1.5
  14. #
  15. ###########################################################################
  16. #
  17. #  Need to open up a temporary file?  This procedure prevents you from
  18. #  clobbering existing files by giving you a unique temp file name.
  19. #  Note that tempname() does not return an open file.  It merely returns
  20. #  a string.  The user is responsible for open()'ing a file by that
  21. #  name, and for removing it when done.
  22. #
  23. #  Note that tempname() is a generator, suspending upto 999 unique
  24. #  (and MS-DOS compatible) filenames.
  25. #
  26. #  Bug:  Icon has no exists() call, so the only way we can tell if a
  27. #  filename is already in use is to try to open it for reading.  On
  28. #  most systems, inability to read a file by a given name does not
  29. #  necessarily indicate that the filename is not in use.  Hence this
  30. #  procedure may, under very, very rare circumstances, return the
  31. #  name of a file already in use.  We're safe, though, since if this
  32. #  ever happens to anyone (which I doubt), no files will get clob-
  33. #  bered.  One workaround for the problem is to call tempname() with-
  34. #  out using any intermediate variables, so that it is resumed until
  35. #  some open function succeeds (e.g. open(tempname())).
  36. #  
  37. ############################################################################
  38. #
  39. #  Requires:  UNIX, MS-DOS or another congenial operating system
  40. #
  41. ############################################################################
  42.  
  43. procedure tempname()
  44.  
  45.     static dir
  46.     initial {
  47.     if find("UNIX",&features) then
  48.         dir := "/tmp/"
  49.     else dir := ""
  50.     }
  51.  
  52.     every temp_name := dir || "icontmp." || right(1 to 999,3,"0") do {
  53.     close(open(temp_name)) & next
  54.         suspend \temp_name
  55.     }
  56.  
  57. end
  58.